iT邦幫忙

2024 iThome 鐵人賽

DAY 7
1
Software Development

Laravel 隨筆學習札記系列 第 7

Day7 - 認識查詢小幫手:Laravel 的 Query Scopes

  • 分享至 

  • xImage
  •  

1. 什麼是 Query Scopes?

嘿!今天我們想聊的是 Laravel 的 Query Scopes!

透過 Query Scopes 這個功能,可以將查詢條件 where 封裝成簡單且可重複使用的方法,讓程式碼更簡潔易讀。


2. 小幫手的種類

Query Scopes 有兩個小幫手哦,分別是 Local ScopesGlobal Scopes

2.1 - Local Scopes

這位小幫手會在你手動告知的時候出現!

比如說,如果你想找所有「紅色的玩具」,你可以告訴局部小幫手來幫忙。

查詢方式是創建一個以 scope 為開頭加上要查詢的條件做結尾的方法名稱 scopeRed

namespace App\Models;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;

class Toy extends Model
{
    public function scopeRed($query): Builder
    {
        return $query->where('color', 'red');
    }
}

2.2 - Global Scopes

這位小幫手會自動幫你找所有的「大玩具」。

比如說,在你打開玩具箱,它都會幫你篩選出來!

創建 Global Scopes,使用Artisan 指令 make:scope,該命令會將生成的範圍放在應用程式的 app/Models/Scopes 目錄中:

php artisan make:scope BigToyScope

Scope 介面中產生 apply 方法,我們就可以根據我們的需求添加 where 約束或其他類型的子句:

namespace App\Models\Scopes;
 
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
 
class BigToyScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        return $builder->where('size', 'large');
    }
}

3. 怎麼呼喚小幫手?

3.1 - 使用 Local Scopes

如果你想找所有「紅色的玩具」,你只需要這樣做:

$redToys = Toy::red()->get();

太簡單了!這樣就能輕鬆找到所有紅色的玩具啦!

3.2 - 使用 Global Scopes

全局小幫手會自動幫你篩選出「大玩具」。你不用每次都告訴他,只要這樣:

$bigToys = Toy::all();

4. 為什麼要使用 Scopes?

  1. 重複使用:Scopes 幫助我們將複雜的查詢封裝成簡單的方法,減少重複的查詢邏輯。
  2. 更簡潔:我們不必每次查詢時都寫重複的條件,範圍讓我們的程式碼更乾淨。
  3. 靈活性:透過範圍,我們可以根據需求靈活地應用不同條件,保持程式碼的可讀性與彈性。

參考資料

  1. 官方網站:Query Scopes
  2. Learn to master Query Scopes in Laravel
  3. Laravel Scopes: A Powerful Feature for Query Filtering

踏著身心靈的塔羅腳步,轉向技術與邏輯的工程師之路,就藉由塔羅日抽來紀錄今日的學習與生活吧!
權杖皇后:鼓勵著我們保持積極的態度,並以自信和熱情去追求自己的目標

There is no time for cut-and-dried monotony. There is time for work. And time for love. That leaves no other time.
沒有時間讓你做一成不變的單調事,因為時間是用來工作與戀愛的。
—— 可可.香奈兒


上一篇
Day6 - 知道 Eloquent ORM 魔術師的隱藏技能嗎?
下一篇
Day8 - Laravel Migration
系列文
Laravel 隨筆學習札記13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言